﻿#define _CRT_SECURE_NO_WARNINGS 1

////C++支持C语言
#include<stdio.h>
//
//int main()
//{
//	printf("HelloWorld!\n");
//	return 0;
//}

//#include<iostream>
//using namespace std;
//
//int main()
//{
//	cout << "HelloWorld!" << endl;
//	return 0;
//}

//namespace：命名空间，本质是定义出⼀个域，这个域跟全局域各自独立,这样就可以避免C语言中因为重名而重定义的问题

//// “rand”: 重定义；以前的定义是“函数”

//#include<stdlib.h>
//int rand = 1;
//int main()
//{
//	
//	printf("%d\n", rand);
//	return 0;
//}


//#include<stdlib.h>
////namespace本质是定义出⼀个域，这个域跟全局域各自独立，不同的域可以定义同名变量，所以下⾯的rand不在冲突了。
//namespace hds
//{
//	int rand = 1;
//}
//
//int main()
//{
//	
//	printf("%p\n", rand);//打印函数的地址
//	printf("%d\n", hds::rand);
//	return 0;
//}

////同一个命名空间中可以同时定义变量/函数/类型
//namespace hds
//{
//	int rand = 10;
//
//	int Add(int x, int y)
//	{
//		return x + y;
//	}
//
//	struct Node
//	{
//		struct Node* next;
//		int val;
//	};
//}
//
//int main()
//{
//	printf("%d\n", hds::rand);
//
//	printf("%d\n", hds::Add(2, 3));
//
//	struct hds::Node node;
//
//	return 0;
//}

////命名空间的嵌套
//namespace hds
//{
//	int rand = 5;
//
//	namespace zm
//	{
//		int rand = 10;
//	}
//
//	//...
//}
//
//int main()
//{
//	printf("%d\n", hds::rand);
//	printf("%d\n", hds::zm::rand);
//	return 0;
//}

 // 多⽂件中可以定义同名namespace，他们会默认合并到⼀起，就像同⼀个namespace⼀样


//命名空间的使用

//指定命名空间访问
//将命名空间中某个成员展开
//将命名空间中所有成员全部展开

namespace hds
{
	int x = 5;
	int y = 10;
}

//using hds::x;  //将命名空间中的x展开

using namespace hds;  //将命名空间中所有成员展开，项⽬不推荐，冲突⻛险很⼤，⽇常⼩练习程序为了⽅便推荐使⽤

int main()
{
	printf("%d\n", x);
	//printf("%d\n", hds::x);
	printf("%d\n", y);
	//printf("%d\n", hds::y);
	return 0;
}